--- %%NOBANNER%% -->
/*-------------------<-- Start of Description-->---------------------\
| Check a date variable; |
| Input variable must be a string (yyyymmdd); |
|---------------------<-- End of Description-->----------------------|
|--------------------------------------------------------------------|
|------------<-- Start of Files or Arguments Needed-->---------------|
| Arguments neede: |
| invar : input variable; |
| outvar: the output variable name; |
| sql : where is this function used, within a sql statement or |
| within a datastep; |
|---------------<-- End of Files Arguments Needed-->-----------------|
|--------------------------------------------------------------------|
|------------------<-- Start of Files Created-->---------------------|
| Usage: %parsedate(invar, outvar, sql); |
\-------------------<-- End of Files Created-->---------------------*/
%macro parsedate(invar, outvar, sql);
/*--------------------------------------------\
| Copy Right: Duo Zhou; |
| Created: 3-11-2002 9:12pm; |
| Purpose: Parse a date variable; |
\--------------------------------------------*/
%if (%quote(&outvar) eq) %then %do;
%let outvar=&invar;
%end;
%if (%quote(%upcase(&sql)) eq SQL) %then %do;
case
when missing(&invar) then .
when length(&invar) < 4 and not missing(&invar) then .
when length(&invar) >= 4 and length(&invar) < 6 then (INPUT((SUBSTR(&invar,1,4)||'1231'), YYMMDD8.)+INPUT((SUBSTR(&invar,1,4)||'0101'), YYMMDD8.)+1)/2
when length(&invar) >= 6 and length(&invar) < 8 then (INPUT((SUBSTR(&invar,1,6)||'01'), YYMMDD8.) + 15)
else INPUT(SUBSTR(&invar,1,8), YYMMDD8.)
end as &outvar
%end;
%else %if (%quote(%upcase(&sql)) ne SQL) %then %do;
if length(&invar) < 4 and not missing(&invar) then &outvar=.;
else if length(&invar) >= 4 and length(&invar) < 6 then
&outvar = (INPUT((SUBSTR(&invar,1,4)||'1231'), YYMMDD8.) +
INPUT((SUBSTR(&invar,1,4)||'0101'), YYMMDD8.)+1)/2;
else if length(&invar) >= 6 and length(&invar) < 8 then
&outvar = (INPUT((SUBSTR(&invar,1,6)||'01'), YYMMDD8.) + 15);
else &outvar = INPUT(SUBSTR(&invar,1,8), YYMMDD8.);
%end;
%mend parsedate;